package com.wangdong.mijiqiqi.activity;

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.wangdong.mijiqiqi.R;

/**
 * 作者：wangdong on 2018/5/30 10:41
 * 邮箱：2100520956@qq.com
 */

public class CeshiFragment extends Fragment {

    /**
     * 执行该方法时，Fragment与Activity已经完成绑定，该方法有一个Activity类型的参数，
     * 代表绑定的Activity，这时候你可以执行诸如mActivity = activity的操作。
     * @param context
     */
    @Override
    public void onAttach(Context context) {
        Log.i("wangdong","Fragment:onAttach()");
        super.onAttach(context);
    }

    /**
     * 这个方法优于onCreate方法 所以也可以作为生命周期来看待
     * @param isVisibleToUser 这个方法只有可见的时候 为true 否则为false
     *                        在该方法里面可以通过调用getUserVisibleHint()获得Fragment的状态是可见还是不可见的，
     *                        如果可见则进行懒加载操作。
     * */
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        Log.i("wangdong","isVisibleToUser：="+isVisibleToUser);
        if (isVisibleToUser) {
//            pullData();网络加载
        }
        super.setUserVisibleHint(isVisibleToUser);
    }

    /**
     * 初始化Fragment。可通过参数savedInstanceState获取之前保存的值。
     * @param savedInstanceState
     */
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        Log.i("wangdong","Fragment:onCreate()");
        super.onCreate(savedInstanceState);
    }

    /**
     * 初始化Fragment的布局。加载布局和findViewById的操作通常在此函数内完成，但是不建议执行耗时的操作，比如读取数据库数据列表。
     * @param inflater
     * @param container
     * @param savedInstanceState
     * @return
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_ceshiwd, null);
        Log.i("wangdong","Fragment:onCreateView()");
        return v;
    }

    /**
     * 执行该方法时，与Fragment绑定的Activity的onCreate方法已经执行完成并返回，在该方法内可以进行与Activity交互的UI操作，
     * 所以在该方法之前Activity的onCreate方法并未执行完成，如果提前进行交互操作，会引发空指针异常。
     * @param savedInstanceState
     */
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        Log.i("wangdong","Fragment: onActivityCreated()");

        super.onActivityCreated(savedInstanceState);
    }

    /**
     * 执行该方法时，Fragment由不可见变为可见状态。
     */
    @Override
    public void onStart() {
        Log.i("wangdong","Fragment:onStart()");
        super.onStart();
        if (getUserVisibleHint()){
//            pullData(); 当可见的时候加载数据
        }
    }

    /**
     * ：执行该方法时，Fragment处于活动状态，用户可与之交互。
     */
    @Override
    public void onResume() {
        Log.i("wangdong","Fragment: onResume()");
        super.onResume();
    }

    /**
     * 执行该方法时，Fragment处于暂停状态，但依然可见，用户不能与之交互。
     */
    @Override
    public void onPause() {
        Log.i("wangdong","Fragment: onPause()");
        super.onPause();
    }

    /**
     * 保存当前Fragment的状态。该方法会自动保存Fragment的状态，比如EditText键入的文本，即使
     * Fragment被回收又重新创建，一样能恢复EditText之前键入的文本。
     * @param outState
     */
    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        Log.i("wangdong","Fragment: onSaveInstanceState()");
        super.onSaveInstanceState(outState);
    }

    /**
     *执行该方法时，Fragment完全不可见。
     */
    @Override
    public void onStop() {
        Log.i("wangdong","Fragment: onStop()");
        super.onStop();
    }

    /**
     * 销毁与Fragment有关的视图，但未与Activity解除绑定，依然可以通过onCreateView方法重新创建视图。
     * 通常在ViewPager+Fragment的方式下会调用此方法。
     */
    @Override
    public void onDestroyView() {
        Log.i("wangdong","Fragment:  onDestroyView()");
        super.onDestroyView();
    }

    /**
     * 销毁Fragment。通常按Back键退出或者Fragment被回收时调用此方法。
     */
    @Override
    public void onDestroy() {
        Log.i("wangdong","Fragment: onDestroy()");
        super.onDestroy();
    }

    /**
     * 解除与Activity的绑定。在onDestroy方法之后调用。
     */
    @Override
    public void onDetach() {
        Log.i("wangdong","Fragment: onDetach()");
        super.onDetach();
    }


    /**
     * Fragment创建：setUserVisibleHint()->onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()；
     Fragment变为不可见状态（锁屏、回到桌面、被Activity完全覆盖）：onPause()->onSaveInstanceState()->onStop()；
     Fragment变为部分可见状态（打开Dialog样式的Activity）：onPause()->onSaveInstanceState()；
     Fragment由不可见变为活动状态：onStart()->OnResume()；
     Fragment由部分可见变为活动状态：onResume()；
     */

    /*
    * 退出应用：onPause()->onStop()->onDestroyView()->onDestroy()->onDetach()
    * （注意退出不会调用onSaveInstanceState方法，因为是人为退出，没有必要再保存数据）；
    *
    * Fragment被回收又重新创建：被回收执行onPause()->onSaveInstanceState()->onStop()->onDestroyView()->onDestroy()->onDetach()，
    * 重新创建执行onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()->setUserVisibleHint()；
    * 横竖屏切换：与Fragment被回收又重新创建一样。
    * */
}
